目指せ語学マスター ハンズオンで翻訳Web APIつくってみた ~Ⅰ:Lambda編~
はじめに
突然ですが告白します。ワタクシ、つい一年ぐらい前までLambdaを「ランバダ」って読んでました。
そんな英語ダメダメな私も弊社の英語研修制度を利用して現在勉強中です。
弊社の英語学習制度について詳しくはこちらをご覧ください。
講師とうまく会話できればめちゃくちゃ楽しいですし、うまく会話できなかったりするとガックシへこみます。
なかなか一朝一夕にはいきませんので少しづつ努力していこうと思っていますが、少し目線を変えてみました。
そうだ!翻訳ツール作ってみよう、そしてあわよくば英語学習に利用してみようと。
そんなわけで、今回は「AWS Hands-on for Beginners 〜Serverless #1〜」で翻訳Web APIをつくってみましょう。
同じようにServerlessを体験してみようとお考えの方の参考になれば幸いです。
AWS Hands-on for Beginners 〜Serverless #1〜
このハンズオンは以下の構成となっていています。
1. Serverlessアーキテクチャの概要
2. AWS Lambdaの概要
3. AWS Lambdaハンズオン① Lambdaを単体で使ってみる
4. AWS Lambdaハンズオン② 他のサービスを呼び出してみる
5. Amazon API Gatewayの概要
6. Amazon API Gatewayハンズオン① API Gatewayを単体で使ってみる
7. Amazon API Gatewayハンズオン② API GatewayとLambdaを組み合わせる
8. Amazon DynamoDBの概要
9. Amazon DynamoDBハンズオン① テーブルを作ってみる
10. Amazon DynamoDBハンズオン② API GatewayとLambdaとDynamoDBを組み合わせる
API GatewayとLambdaとDynamoDBを組み合わせるなんて、いきなりハードル上がってきましたね。
最終的な構成図はこんな感じになります。 (構成図はハンズオン資料からの抜粋です)
今回はちょっと長いので「4.」のLambda部分までをやってみたいと思います。よっしゃー、がんばってやっていきましょう。
気になる料金ですがLambdaもAPI GatewayもDynamoDBも無料利用枠があるのでハンズオンの中で利用する分については気にしなくても大丈夫そうです。(唯一、API Gatewayはアカウント登録から最大で12か月間の無料利用枠なのでハンズオン後もいろいろやってみたい場合はちょっとだけ意識しておきたいですね)
このハンズオンは無料で視聴できますが、はじめに申込みが必要です。
申込み後に視聴可能になりますし、資料をダウンロードすることも可能です。
「AWS Hands-on for Beginners 〜Serverless #1〜」についての詳しい説明は以下のリンクを参照して下さい。
参考:AWS ハンズオン資料
Lambda単体で使ってみる
それではさっそくハンズオンをやってみたいと思います。 よろしくお願いしまーす。
まずはLambda単体で体験していきましょう。「ランバダ」って読んでた頃の自分に膝カックンしたい気分です。
(そもそも「ランバダ」ってなに?の若い方もいますよね。きっと。。。)
作成してみる
コンソールからAWS Lambdaに移動して関数の作成から始めましょう。
今回のハンズオンでは「一から作成」を選んで作っていきますが、サンプルコードを使用したりServerless Application Repositoryを利用して作っていくこともできるみたいですね。
関数名と関数を記述する言語を設定して作成します。言語は「Python 3.8」を選びました。(ハンズオンではPython 3.7です)
Pythonも最初の頃は「フォトン」なんて呼んでましたね~。。。
ハンズオンなのでIAMロールはデフォルトで作成されるものを利用しますが、実際に利用していく場合は必要最低限の権限設定を心がけましょう。
作成した関数の設定画面になります。要素が多いので分割でお見せします。まずは設定タブから
コードを記述していくエリアですね。今回一番多くさわります。
ここは今回のハンズオンでは利用していませんので画面構成だけ。
このあと基本設定でメモリやタイムアウトの設定変更をしていきます。
ここから下は今回のハンズオンでは利用していませんので画面構成だけ。
せっかくなので他のタブも見てみましょう。まずはアクセス権限タブから
続いてモニタリングタブです。使っているとここでいろいろ見れるようになんですね。
コードを書いていく前にメモリとタイムアウトの設定を変更します。
メモリは128MBから256MBへ、タイムアウトは3秒から10秒に変更しましょう。
次にデフォルトで作成されたIAMロールの権限を確認してみます。
CloudWatch Logsへの書き込み権限がデフォルトで設定されていました。デバックの時などに役立つそうです。
テスト実行してみる
コードはデフォルトのままテスト実行してみましょう。
まずはテストイベントを作成していきますので、「テスト」ボタンを押します。
イベント名だけ設定してあとはデフォルトのまま「作成」を押しましょう。
それでは「テスト」していきます。(どきどき)
うまく成功したようです。といってもデフォルトのままなんですけどねー。
コードを修正してみる
それではお待ちかね! コードを修正していきましょう。
まずはテストイベントからのパラメータをログ出力してみます。
ハンズオンではコンソールエディタで作業してますが、ツールなんかも利用できるみたいですのでどこかで試してみたいなぁと思っています。
デプロイしたらテストしてみましょう。
テストイベントのパラメータがログ出力されたと思います。
CloudWatch Logsもこんな感じになってました。
モニタリングタブも見てみました。 テスト実行したのでポツッと点が表示されていますね。
Lambdaから他のサービスを呼び出してみる
今度はLambdaからAmazon Translateを呼び出して日本語を英語に変換してみましょう。
来ました! 翻訳Web APIの第一歩ですね。(わくわく)
コードはこんな感じで、今回はinput_textは直書きです。
テキストには「おはよう」と設定しましたので「good morning」と翻訳されればOKですね。
テスト実行の前にLambda関数用のIAMロールへAmazon Translateのアクセス権を設定しましょう。
これしないと権限ないんでエラーになりますもんね。アクセス権限タブからIAMロールをクリックして設定していきます。
「ポリシーをアタッチします」を選択してアクセス権限を選んでいきます。
ハンズオンではフルアクセスの権限を設定しますが、実際には必要最低限の権限設定を心がけたいですね。
問題なくIAMロールに権限を追加できました。
Lambda側でもアクセス権が追加されたことが確認できました。
さぁ、テスト実行してみましょう。(どきどき)
input_text「おはよう」が英語に翻訳され結果がoutput_textに「Good morning」として格納されましたね。やったね!
まとめ
ここまでLambdaをさわってみて改めてサーバレスっていいなぁと思いました。
サーバーを立てる必要もないですし、料金もリスクエスト数と実行時間によって発生するので分かりやすくていいですし、無料利用枠もあるので試してみるぐらいだったら問題なく無料で出来ます。
ハンズオンはまだ1/3体験しただけですのでこのあとAPI Gateway、DynamoDBとの連携を体験していきたいですね。
同じようにServerlessを体験してみようとお考えの方の参考になれば幸いです。